/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.negocio.producto;

import com.mindbox.mueblesalpes.negocio.entity.Mueble;
import com.mindbox.mueblesalpes.negocio.entity.MuebleInventario;
import java.util.List;
import javax.ejb.Local;

/**
 * Interfaz Local que expone los servicios relacionados con productos
 * @author Catalina
 */

@Local
public interface IProductoService {

    /**
     * Método que consulta todos los muebles registrados en el sistema
     * @return List<Mueble> listaMuebles Lista de muebles registrados
     */
    public List<Mueble> consultarMuebles();

    /**
     * Méodo que consulta un mueble en el sistema
     * @param mueble Mueble con tres parámetros posibles de búsqueda
     *               referencia, nombre, tipoMueble
     * @return   Lista de muebles que cumplen con el filtro de búsqueda
     */
    public List<Mueble> consultarMueble(Mueble mueble);

    /**
     * Método que consulta el inventario de muebles en el sistema
     * @return List<MuebleInventario> Lista del inventario de muebles
     */
    public List<MuebleInventario> consultarInventarioProductos();

    /**
     * Método que permite agregar un mueble en el sistema
     * @param mueble Mueble que será agregado
     */
    public void insertarProducto(Mueble mueble);

    /**
     * Método que permite eliminar un mueble en el sistema
     * @param mueble Mueble que se eliminará del sistema
     */
    public void eliminarProducto(Mueble mueble);

    /**
     * Método que pemite editar el inventario de productos en el sistema
     * @param muebleInventario Mueble con los datos que serán actualizados
     */
    public void editarProductoInventario(MuebleInventario muebleInventario);

    /**
     * Método que permite editar un mueble en el sistema
     * @param mueble  Mueble con los datos con los cuales será actualizado
     */
    public void editarProducto(Mueble mueble);

    /**
     * Método que permite consultar el inventario de un mueble
     * @param mueble Mueble del cuál se quiere consultar el inventario
     * @return MuebleInventario retorna el inventario de un mueble
     */
    public MuebleInventario consultarMuebleInventarioPorMueble(Mueble mueble);

    /**
     * Método que permite consultar un mueble por la llave primaria, por la
     * referencia
     * @param mueble Mueble que se desea buscar, con la referencia
     * @return Retorna el mueble asociado a la referencia ingresada
     */
    public Mueble consultarMueblePorId(Mueble mueble);

    /**
     * Método que permite eliminar el inventario de un mueble en el sistema
     * @param muebleInventario Inventario que se eliminará del sistema
     */
    public void eliminarProductoInventario(MuebleInventario muebleInventario);
}
